﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.SuperGrid;
using DevComponents.DotNetBar.SuperGrid.Style;
using Platform.Model;
using Platform.Model.Repositories;
using PlatformManagement.Properties;
using BLToolkit.Data;

namespace PlatformManagement
{
    public partial class MarketForm : DevComponents.DotNetBar.Metro.MetroForm
    {
        private List<Market> _market;
        private Dictionary<string, Market> _mapper;
        bool _currentDerty = false;
        public MarketForm()
        {
            InitializeComponent();
            dgMarket.AutoGenerateColumns = false;
        }

        protected override void OnActivated(EventArgs e)
        {
            _market = Market.Objects.ToList();
            _mapper = _market.ToDictionary(p => p.MarketName, p => p);
            base.OnActivated(e);
            WindowState = FormWindowState.Maximized;
        }

        private void MarketFormLoad(object sender, EventArgs e)
        {
	        var bsMarket = new BindingSource {DataSource = Market.Objects.ToList()};
            dgMarket.DataSource = bsMarket;
            base.OnShown(e);
        }

        private void Copy_Click(object sender, EventArgs e)
        {

        }

        private void Delete_Click(object sender, EventArgs e)
        {
            var selectRow = dgMarket.Rows.Cast<DataGridViewRow>()
                    .Where(x => x.Cells[0].Value!=null&& (bool)x.Cells[0].Value).ToList();
            if (selectRow.Count == 0)
            {
                MessageBox.Show("Hãy chọn dòng có dữ liệu, Tick vào ô trông để chọn dòng xóa", "warning", MessageBoxButtons.OK);
                return;
            }
            var message = "All selected articles and related data will be deleted forever. Are you sure?";
            if (MessageBox.Show(message, "Warning!!!", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {


                for (int i = selectRow.Count - 1; i >= 0; i--)
                {

                    int id = Convert.ToInt32(selectRow[i].Cells[1].Value);
                    var m = Market.Objects.FirstOrDefault(x => x.ID == id);
                    Market.Objects.DeletebyID(id);
                    
                    _mapper.Remove(m.MarketName);
                }

                var bsMarket = new BindingSource { DataSource = Market.Objects.ToList() };
                dgMarket.DataSource = bsMarket;
                
            }
        }

        private void dgMarket_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
           
            if (_currentDerty)
            {
                //lấy dòng hiện tại
                try
                {
                    
                    var currentrow = dgMarket.Rows[e.RowIndex];
                    //lấy Siêu thị hiển thị trên dòng hiện tại
                    Market mk = currentrow.DataBoundItem as Market;
                    //cập nhật thời gian
                    mk.LastUpdated = DateTime.Now;
                    // ham them moi hoac cap nhat
                    if (mk.ID == 0 && _mapper.ContainsKey(mk.MarketName))
                        throw new DuplicateNameException("MarketName value must be unique");    
                    //them môt mat hang
                    if (mk.ID == 0)
                    {
                        
                        mk.Insert();
#region sql
                       // mk.Insert();
//                        DbManager db = new DbManager("DbConnection");
//                        db.SetCommand(@"Insert into Market(MarketName,Address,WH,Options)
//                                        values (@name,@add,@wh,@opp);",
//                                        db.Parameter("@name", mk.MarketName),
//                                        db.Parameter("@add", mk.Address),
//                                        db.Parameter("@wh", mk.WH),
//                                        db.Parameter("@opp", mk.Options)).ExecuteNonQuery();
                        //_market.Add(mk);
#endregion
                        _mapper.Add(mk.MarketName, mk);
                        var bsMarket = new BindingSource { DataSource = Market.Objects.ToList() };
                        dgMarket.DataSource = bsMarket;
                      
                    }//ngược lại cập nhât
                    else
                    {
                        // Tim market da co trong danh sach theo id

                        var mark = _market.FirstOrDefault(x => x.ID == mk.ID);
                        _mapper.Remove(mark.MarketName);
                        if (_mapper.ContainsKey(mk.MarketName))
                            throw new DuplicateNameException("MarketName value must be uniquee");
                       
                        mk.Update();
                        _mapper.Add(mk.MarketName,mk);
                        var bsMarket = new BindingSource { DataSource = Market.Objects.ToList() };
                        dgMarket.DataSource = bsMarket;
                        
                    }
                }
            
            catch(Exception ex){
                MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                var bsMarket = new BindingSource { DataSource = Market.Objects.ToList() };
                dgMarket.DataSource = bsMarket;
            }
            }
            _currentDerty = false;
            
        }

        private void dgMarket_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (dgMarket.IsCurrentRowDirty && e.ColumnIndex > 0)
            {
                var currentRow = dgMarket.Rows[e.RowIndex];
                int WH = 0;

              
                //truong hợp nhập WH không là số.
                if (int.TryParse(currentRow.Cells[4].Value.ToString().Trim(), NumberStyles.Any, NumberFormatInfo.InvariantInfo ,out WH)==false)
                {
                    MessageBox.Show("Bạn phải nhập kí số vào đây", "Data Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    
                    e.Cancel = true;
                }
                else
                {
                    if (currentRow.Cells[2].Value == null||String.IsNullOrEmpty(currentRow.Cells[2].Value.ToString()))
                    {
                        MessageBox.Show("bạn bắt buộc phải nhập tên Market", "Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                        e.Cancel = true;
                    }
                   
                }
            }
            _currentDerty = dgMarket.IsCurrentRowDirty;
        }

        private void dgMarket_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("Lỗi happened" + e.Context.ToString());
            if (e.Context == DataGridViewDataErrorContexts.Parsing)
                MessageBox.Show("Bạn phải nhập số vào cột WH.");
            if (e.Context == DataGridViewDataErrorContexts.Commit)
                MessageBox.Show("MarketName value must be unique");

        }
        
        
       

    }
}